import { login, getUserInfo, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
// 导入持久化方法
// 导出所有方法
import * as auth from '@/utils/auth'
// console.log(auth)
// 存储登录人信息
export default {
  // 开启命名空间
  namespaced: true,
  // 定义数据变量（全局共享的）（和组件data类似的：私有）=>相同点：都是响应式的
  state: {
    token: auth.getToken() || '',
    // 当前登录人的信息
    user: {}
  },
  // 修改state定义的变量（只能通过它修改）特点：同步
  mutations: {
    /**
     *
     * @param {*} state
     * @param {*} payload
     */
    setToken (state, token) {
      state.token = token
      auth.setToken(token)
    },
    delToken (state) {
      state.token = ''
      auth.removeToken()
    },
    // 设置用户信息
    setUser (state, user) {
      state.user = user
    },
    // 删除用户信息
    delUser (state) {
      state.user = {}
    }
  },
  // 获取后台数据的方法 =>特点：异步执行
  actions: {
    async getTokenAction ({ commit }, loginForm) {
      const res = await login(loginForm)
      console.log(res)
      commit('setToken', res)
      // console.log('登陆成功：', ctx, loginForm)
    },
    async getUserAction ({ commit }) {
      //  获取登录人信息
      const user = await getUserInfo()
      const photo = await getUserDetailById(user.userId)
      console.log('登陆人信息:', user, photo)
      commit('setUser', { ...user, ...photo })
      // 返回数据=》外边调用，可以通过.then或者await获取
      // return 的值相当于resolve(值)
      return user.roles
    },
    /**
   * 退出登录=》删除token和登录人user信息
   * @param {} param0
   */
    logoutAction ({ commit }) {
      commit('delToken')
      commit('delUser')
      // 重置路由，避免缓存
      resetRouter()
      // 2，清除菜单数据，只留下静态路由的数据
      // 说明：跨模块调用 => 第三个参数必须传入{root:true}
      commit('menu/setList', [], { root: true })
    }
  }
}
